/*
     Estado        Metodo
     P          buscar - Diego
     P          comparar - Diego
     P          articulosCategoria - Diego
 */
package gestores.pagina;

import dal.ArticuloDAL;

import dal.CampaniaDAL;

import excepciones.AvwException;

import java.util.ArrayList;
import java.util.HashMap;

import java.util.Iterator;

import negocio.ArticuloCampania;
import negocio.ArticuloWeb;
import negocio.CampaniaWeb;
import negocio.CategoriaArticulo;
import negocio.CategoriaRubro;
import negocio.CategoriaWeb;
import negocio.FotoArticuloWeb;
import negocio.Marca;

import util.FuncionGestores;

public class GestorLista {
    /**
     * Consiste en un buscar articulos en donde tambien se especifica por parametro
     * el campo de ordenacion de la lista.
     * Retorna un ArrayList con los siguientes datos de los articulos
     * de una campania que cumplen con las condiciones de busquedas:
     * fotos, artCodigo, cawNombre, marNombre, artNombre, artDescripcion,
     * arcPrecioDescuento y arcPrecioLista.
     * @return ArrayList<HashMap>
     * @param String codigo_campania.
     * @param String busqueda (con el texto a buscar).
     * @param String codigo_categoria (-1 en caso de que no se especifique una categoria).
     * @param String codigo_marca (-1 en caso de que no se especifique una marca).
     * @param int ordenamiento (tipo de ordenamiento - 0: nombre, 1: marca,
     * 2: categoria, 3: menor precio, 4: mayor precio).
     * */
    public static ArrayList<HashMap> buscar(String codigo_campania,
            String busqueda,
            String codigo_categoria,
            String codigo_marca,
            int ordenamiento) throws AvwException, NullPointerException {
        ArrayList<ArticuloCampania> articulos ;
        ArrayList<HashMap> articulosCompletos;
        articulos =
                ArticuloDAL.listarArticulosCampaniaBusqueda(new CampaniaWeb(codigo_campania),
                busqueda,
                new CategoriaWeb(codigo_categoria),
                new Marca(codigo_marca),
                ordenamiento);
        
        articulosCompletos=FuncionGestores.obtieneArticulosCompletos(articulos);
        if(articulosCompletos == null){throw new AvwException("Error."); }
        return articulosCompletos;
    }
    
    /**
     * Obtiene una lista con los articulos.
     * @return ArrayList<HashMap> de los sigientes datos de los articulos:
     * artCodigo, foto, categoria, marca, nombre, arcPrecioLista,
     * arcPrecioDescuento y caracteristicas tecnicas de los articulos
     * seleccionados para comparar.
     * @param String camCodigo
     * @param ArrayList<HashMap> articulos. Donde cada hash contiene
     * el codigo ('artCodigo') de los articulos seleccionados.
     **/
    public static ArrayList<HashMap> comparar(String camCodigo,
            ArrayList<HashMap> articulosHash)throws NullPointerException,
            AvwException {
        ArrayList<HashMap> articulos = new ArrayList<HashMap>();
        ArrayList<ArticuloCampania> articulosCampania =
                new ArrayList<ArticuloCampania>();
        
        String rubro = "-1";
        boolean comparar = true;
        for (HashMap articuloHash: articulosHash) {
            CampaniaWeb campaniaWeb = new CampaniaWeb(camCodigo);
            ArticuloWeb articuloWeb =
                    new ArticuloWeb(articuloHash.get("artCodigo").toString());
            
            ArticuloCampania artCampania = new ArticuloCampania();
            artCampania = ArticuloDAL.obtenerArticuloCampania(campaniaWeb,
                    articuloWeb);
            articulosCampania.add(artCampania);
            
            if (rubro.equals("-1")){
                rubro = artCampania.getArcArticulo().getArtRubro();
            }
            if((rubro.equals(artCampania.getArcArticulo().getArtRubro()))&&(comparar)){
                rubro = artCampania.getArcArticulo().getArtRubro();
            }else{
                comparar = false;
            }
            
        }
       
        boolean categoria = true;
        for (ArticuloCampania articulo: articulosCampania) {
            HashMap articuloHash = new HashMap();
            
            if (comparar){
                articuloHash = articulo.getArcArticulo().obtenerDatos();
                
            }else{
                articuloHash = articulo.getArcArticulo().obtenerDatosResumen();
            }
            
            /*Falta declarar la estructura del url*/
            articuloHash.put("url",
                    articulo.getArcArticulo().getArtDescripcion());
            
            articuloHash.put("arcPrecioDescuento",
                    articulo.getArcPrecioDescuento());
            articuloHash.put("arcPrecioLista",
                    articulo.getArcPrecioLista());
            

            /*
            CategoriaArticulo categoriaArticulo =
                    ArticuloDAL.obtenerCategoriaArticulo(articulo.getArcArticulo());
            */
            articulos.add(articuloHash);
        }
        if (categoria == false){
            for (HashMap artHash : articulos){
                artHash.put("categoriaArticulo", new ArrayList<HashMap>());
            }
        }
        
        if(articulos == null){throw new AvwException("Error.");}
        return articulos;
    }
    
    /**
     * Obtiene una lista con los siguientes datos de los articulos
     * de una campania y categoria especifica:
     * codigo, foto, categoria, marca, nombre, descripcion,
     * precio lista y precio descuento.
     * @return ArrayList<HashMap> articulos.
     * @param String codigo_campania
     * @param String codigo_categoria
     * @param int ordenamiento (0: nombre, 1: marca, 2: categoria,
     * 3: menor precio, 4: mayor precio).
     **/
    public static ArrayList<HashMap> articulosCategoria(String codigo_campania,
            String codigo_categoria,
            int ordenamiento) throws AvwException, NullPointerException {
        ArrayList<ArticuloCampania> articulos = null;
        ArrayList<HashMap> articulosCompletos;
        articulos =
                ArticuloDAL.listarArticulosCampaniaPorCategoria(new CampaniaWeb(codigo_campania),
                new CategoriaWeb(codigo_categoria),
                ordenamiento);
        articulosCompletos =   FuncionGestores.obtieneArticulosCompletos(articulos);
        if(articulosCompletos==null){throw new AvwException("Error.");}
        return articulosCompletos;
    }
    
}
